{
 "cells": [
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**问题：**\n",
    "假设你正在为一个电影推荐系统设计一个简单的KNN算法。我们有以下一些用户的电影评分数据，数据由两个特征组成：用户对电影A和电影B的评分，分别在1-5之间。用户的标签（电影类型偏好）是动作片（标签0）或者是喜剧片（标签1）。我们有一个新用户，他给电影A评分为3，电影B评分为4。请问这个用户可能偏好哪种类型的电影？\n",
    "\n",
    "**数据：**\n",
    "\n",
    "| 用户   | 电影A评分 | 电影B评分 | 偏好类型 |\n",
    "| ------ | --------- | --------- | -------- |\n",
    "| 用户1  | 5         | 1         | 动作片   |\n",
    "| 用户2  | 4         | 2         | 动作片   |\n",
    "| 用户3  | 2         | 5         | 喜剧片   |\n",
    "| 用户4  | 1         | 4         | 喜剧片   |\n",
    "| 用户5  | 3         | 2         | 动作片   |\n",
    "| 用户6  | 2         | 5         | 喜剧片   |\n",
    "\n",
    "你需要做以下步骤：\n",
    "1. 构造数据\n",
    "2. 创建KNN模型\n",
    "3. 使用数据训练模型\n",
    "4. 预测新用户的喜好"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 0. 引入核心包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.neighbors import KNeighborsClassifier"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 1. X, y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "X = np.array([\n",
    "    [5, 1],  # 用户1的评分\n",
    "    [4, 2],  # 用户2的评分\n",
    "    [2, 5],  # 用户3的评分\n",
    "    [1, 4],  # 用户4的评分\n",
    "    [3, 2],  # 用户5的评分\n",
    "    [2, 5]   # 用户6的评分\n",
    "])#TODO\n",
    "\n",
    "y = np.array([0, 0, 1, 1, 0, 1])#TODO  # 0表示动作片，1表示喜剧片"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 2. 创建 KNN 模型\n",
    "k = 1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "knn = KNeighborsClassifier(n_neighbors=1)\n",
    "#TODO"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 3. 训练模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-1 {color: black;}#sk-container-id-1 pre{padding: 0;}#sk-container-id-1 div.sk-toggleable {background-color: white;}#sk-container-id-1 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-1 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-1 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-1 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-1 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-1 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-1 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-1 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-1 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-1 div.sk-item {position: relative;z-index: 1;}#sk-container-id-1 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-1 div.sk-item::before, #sk-container-id-1 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-1 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-1 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-1 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-1 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-1 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-1 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-1 div.sk-label-container {text-align: center;}#sk-container-id-1 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-1 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>KNeighborsClassifier(n_neighbors=1)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" checked><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">KNeighborsClassifier</label><div class=\"sk-toggleable__content\"><pre>KNeighborsClassifier(n_neighbors=1)</pre></div></div></div></div></div>"
      ],
      "text/plain": [
       "KNeighborsClassifier(n_neighbors=1)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# TODO\n",
    "knn.fit(X, y)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 4. 用模型推理(预测)用户的喜好"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "new_user = np.array([[3, 4]])\n",
    "prediction = knn.predict(new_user)#TODO"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 5. 数据可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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1VjwWVpaFsgvbEGNa0hMPUdTzw8w/RyZn/Ez9RyZn25jFhati6Zz587h3Llzau3Hjh3T2F8ikege1WuysrIAaD56Vb16dVhZWeHMmTMYOXKksv327duIjY1F48aN9RIDERERkVbzNMnl8jz/KIqdvDh//rxaW3BwMACgdevWALIv/lacv7Szs0OHDh2wc+dOxMTEKNdZuXIlrKys0Lt37zzHQERERKSJQc0IPmLECNja2qJt27YwNzfHiRMncOzYMXTr1g2dOnVCSkoKKlSoAHd3d+UEmvPmzUNkZCT8/PwwdOhQ3L59Gz/88AMCAwNRpkyZIs6IiIiITIVBPbB30qRJyMzMREhICBYsWIBnz57hq6++Us73ZGlpCXd3d5ViqFatWoiMjISrqyvmz5+PkydP4uuvv0ZgYGBRpUFEREQmyKCONA0YMAADBgzIcblUKtX4iJYWLVpovN6KiIiISF8M6kgTERERkaFi0URERESkBRZNRERERFrQuWhKT0/Ht99+i2HDhqFdu3b47bffAAAvX77M9ZlvRERERMZIp6Lp1q1bqFSpEsaMGYMdO3bg6NGjiI2NBQDExsaiQoUK+PHHH/UaKBEREVFR0qlomjBhAl6+fImzZ88iKioKQgjlMg8PD/Tq1Qvffvut3oIkIiIiKmo6FU2//PILPv74YzRs2FDj41KqVauGv//+O9/BERERERkKnYomCwuLXJ8t988//0Amk+kcFBEREZGh0aloev/99/H999/jwYMHasuuXLmCDRs2wNfXN9/BERERERkKnYqmr776CtbW1qhduzamTJkCiUSCH374Ab1790bDhg0hl8uxcOFCfcdKREREVGR0KppKly6NP/74A/369cPhw4chhMCuXbuwb98+tG3bFr/99hsaNGig71iJiIiIiozOz55zcXHBqlWrsGrVKjx79gxyuRwlSpSAubm5PuMjIiIiMgh6eWCvm5ubPoYhIiIiMlhaFU3Dhg1DdHQ0IiIiYGVlhaFDh751HYlEgnXr1uU7QCIiIiJDoFXRdOrUKTx79gxpaWmwsrJCWFjYW9dh0URERESmRKui6cqVK8jIyIC9vT0AQC6XF2hQRERERIZGq7vnrKyslAUTAGzZsgXp6ekFFhQRERGRodFpyoH+/fvDzc0NAQEBOHz4MI88ERERkcnTqWjas2cPevTogX379qF9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VsSXX34JmUyG/fv3Y/z48SZ96sPUSCQStGjRAi1atFDuw969e3MfUpExqKIpKSkJly9fxoQJE9SWOTk5YeTIkbC0tIS7u7tKMVSrVi1ERkZi8uTJmD9/PkqXLo2vv/5a4zhEREREujCookmb2Q+kUqnyCNPrWrRogXPnzhVEWERERESGdU0TERERkaFi0URERESkBRZNRERERFpg0URERESkBRZNRERERFpg0URERESkBRZNRERERFpg0URERESkBRZNRERERFpg0URERESkBRZNRERERFpg0URERESkBRZNRERERFpg0URERESkBRZNRERERFpg0URERESkBRZNRERERFpg0URERESkBRZNRERERFpg0URERESkBRZNRERERFpg0URERESkBRZNRERERFpg0URERESkBRZNRERERFpg0URERESkBRZNRERERFow2KLp6tWrqFatGk6cOJFrvyNHjkAikaj9BAQEFEqcRERE9G6wKOoA3vT48WN8+eWXWLFiBWQy2Vv7x8fHAwAWLFgAW1tbZXu1atUKLEYiIiJ69xhU0XTu3Dk0bdoUFhYWaN26NQ4ePPjWdRISEgAAEydOhLW1dQFHSERERO8qgzo9J4TARx99hCtXrqBv375arZOQkAArKysWTERERFSgDOpI03vvvYf33nsPAHDq1Cmt1klISICjo2NBhkVERERkWEeadJGQkAAbGxv8888/ePbsWVGHQ0RERCbKoI406SI+Ph4PHz5E+fLlAQAlSpTA6NGjMWPGDFhY5Jxeeno60tPTla+TkpIAADKZTKsL0LWlGEufYxoaU8/R1PMDTD9H5mf8TD1H5pf/sQuDRAghCm1reRAWFoYhQ4bg+PHjaNmyZY79IiMj8fz5c1hZWeHBgwcIDQ3FtWvXMHr0aKxYsSLH9ebMmYOgoCC19k2bNqnchUdERESGKy0tDf3790diYmKBX65j9EXTm9LT09GkSRNcunQJz549g7Ozc4793jzS5OHhgdjYWL2+6TKZDIcPH0bbtm1haWmpt3ENiannaOr5AaafI/MzfqaeI/PTXVJSElxdXQulaDL603Nvkkql6N+/P/744w/cvHkTvr6+OfaTSqVq7ZaWlgXyC1tQ4xoSU8/R1PMDTD9H5mf8TD1H5qfbmIXF6C8E1yQtLQ0AYGdnV8SREBERkakwuqIpNjYWGRkZ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YmLw7bffqp1eS0hIgJubG7Zu3apV0fSm7777Dq1bt8aaNWuUbZqOhOmbp6cnDh48iLi4ODg7OyvbXz+KRkQFh9c0EZGajz/+GDdv3kRYWBgGDx6c45EgAOjZsyeSk5OxaNEilfbdu3fj+vXr6Nu3r0p73759ceLECezcuRMVK1ZEo0aNchzbwsICrVu3RkREBC5fvqyy7MGDB0hLS8txXcWpOU0FX7FixeDv74/9+/e/9dExmiQmJiqPggHZp+QU0wu8zsHBAUD2aUZ9aNGiBQDgiy++ULbJ5XLMmzdPL+MTUe5YNBGRmq5du8LNzQ0pKSkYPnx4rn0DAgLg5+eHuXPnolOnTpg/fz6GDh2K3r17o379+hg/frxK/z59+iAjIwMbNmzI8QLw182fPx8WFhZo0qQJRo0ahS+++AIBAQHw8fFBUlKSxnWysrKwfft21KlTBx4eHhr79OjRA69evVK5MF1brVq1wvHjx/HRRx8hKCgIDRs2RIkSJdT61a9fHwAwcOBAzJs3D3/99Veet/W6Pn36oHr16liyZAl69uyJuXPnomXLlsrCT3EROREVDBZNRKTG0tISgwcPRvPmzTVeBP06CwsLHDhwAJ9//jn++usvzJ07F0eOHMGnn36KY8eOqZ2yq1y5MurUqYNnz55pVTTVqVMHJ06cgK+vLzZs2IDFixfjxo0bWLVqlfJC6TcdP34cz549wwcffJDjuN26dYOZmZnWE12+7rvvvkP37t0RERGB1atXY/DgwRqLywEDBiAgIABnzpzB8uXLkZWVledtvc7c3ByRkZHo0aMHIiMjERwcjCpVqijvduQs40QFSyKEHp4JQERERebs2bPw9fVFSEgIxo4dW9ThEJksHmkiIjISMpkMqampKm0ZGRkICgqCmZlZrkfWiCj/ePccEZGRePHiBapUqYKuXbuiSpUqiI+Px759+3Djxg3lY2yIqODw9BwRkZF49eoVpk+fjr179+Lhw4ewsLBAzZo1MWrUqFynbiAi/WDRRERERKQFXtNEREREpAUWTURERERaYNFEREREpAUWTURERERaYNFEREREpAUWTURERERaYNFEREREpAUWTURERERaYNFEREREpIX/A1/g/MMaX8zYAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.title(\"User Movie Preference\", size=15) \n",
    "plt.xlabel(\"Movie A rating\")\n",
    "plt.ylabel(\"Movie B rating\")\n",
    "plt.grid()\n",
    "\n",
    "# 绘制原始样本点，要求不同的影片喜好类别用不同的颜色标记\n",
    "# 提示: 用scatter散点图绘制，用它的参数c实现不同的类别用不同的颜色标记\n",
    "#TODO\n",
    "plt.scatter(X[:, 0], X[:, 1], c=y, cmap='bwr', edgecolors='k')\n",
    "\n",
    "\n",
    "# 绘制新数据点，用红色x标记，大小为8\n",
    "# 提示：用plt.plot()绘制，用它的参数marker实现不同的标记符号\n",
    "#TODO\n",
    "plt.scatter(new_user[0, 0], new_user[0, 1], color='red', marker='x', s=8)\n",
    "\n",
    "\n",
    "\n",
    "# 新数据最近邻索引为第一个最近邻的索引\n",
    "dist, idx = knn.kneighbors(new_user) #TODO\n",
    "nearest = X[idx[0, 0]]#TODO # 获取最近邻点的坐标，这是一个列表，第一个元素是x坐标，第二个元素是y坐标\n",
    "\n",
    "# 用红线标记新数据点与最近邻点的连接线\n",
    "# 提示：用plt.plot()绘制，用 r-- 实现红色虚线\n",
    "#TODO\n",
    "plt.plot([new_user[0, 0], nearest[0]], [new_user[0, 1], nearest[1]], 'r--')\n",
    "# 为每个点添加坐标文本  \n",
    "for x, y in zip(X[:, 0], X[:, 1]):\n",
    "    plt.text(x, y+0.1, f'({x}, {y})') \n",
    "\n",
    "# 为新数据点添加坐标文本\n",
    "plt.text(new_user[0,0], new_user[0,1]+0.1, f'({new_user[0,0]}, {new_user[0,1]})')\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
